Compile-Time এবং Runtime Meta-Programming

Computer Programming - গ্রুভি (Groovy) Meta-Programming in Groovy (মেটাপ্রোগ্রামিং) |
195
195

Compile-Time এবং Runtime Meta-Programming in Groovy

Groovy একটি ডাইনামিক প্রোগ্রামিং ভাষা যা Meta-Programming এর শক্তিশালী সমর্থন প্রদান করে। Meta-Programming এমন একটি প্রক্রিয়া যা কোডের গঠন এবং আচরণকে রানটাইম বা কম্পাইল-টাইমে পরিবর্তন করতে সহায়তা করে। Groovy তে, মেটা-প্রোগ্রামিং দুটি প্রধান ধাপে ভাগ করা যায়: Compile-Time Meta-Programming এবং Runtime Meta-Programming। এই দুটি পদ্ধতি কোডের আচরণ পরিবর্তন করতে সহায়তা করে, তবে তারা বিভিন্ন সময়ে এবং বিভিন্ন উপায়ে কাজ করে।

এখানে Compile-Time এবং Runtime Meta-Programming এর সম্পর্কে বিস্তারিত আলোচনা করা হলো।


1. Compile-Time Meta-Programming

Compile-Time Meta-Programming হল একটি পদ্ধতি যা কম্পাইলেশনের সময় কোডের মেটা-ডেটা পরিবর্তন বা প্রসেস করে। Groovy তে AST Transformations (Abstract Syntax Tree Transformations) ব্যবহার করে Compile-Time মেটা-প্রোগ্রামিং করা হয়। এই প্রক্রিয়ায়, কোডের গঠন (syntax) বা তার আচরণ কম্পাইলেশন টাইমে পরিবর্তন করা হয়, এবং এটি কোডের কার্যকারিতা সরাসরি প্রভাবিত করতে পারে।

1.1 AST Transformations

Groovy তে AST Transformations ব্যবহার করে আপনি ক্লাসের মেথড বা প্রপার্টির আচরণ পরিবর্তন করতে পারেন, যেমন @TupleConstructor, @Canonical, @Immutable, ইত্যাদি। এগুলি কম্পাইল-টাইমে কোডকে পরিবর্তন করে।

1.2 @TupleConstructor উদাহরণ

@TupleConstructor একটি Groovy AST transformation যা ক্লাসের জন্য একটি কন্সট্রাক্টর তৈরি করে, যা সব প্রপার্টি প্যারামিটার হিসেবে নেবে।

@TupleConstructor
class Person {
    String name
    int age
}

def person = new Person("John", 30)
println person.name  // Output: John
println person.age   // Output: 30

এখানে, @TupleConstructor দিয়ে Groovy ক্লাসের জন্য একটি কন্সট্রাক্টর তৈরি করেছে, যা name এবং age কে ইনিশিয়ালাইজ করে।

1.3 @Canonical উদাহরণ

@Canonical একটি Groovy AST transformation যা ক্লাসের জন্য toString(), equals() এবং hashCode() মেথডগুলি তৈরি করে।

@Canonical
class Person {
    String name
    int age
}

def person1 = new Person("Alice", 25)
def person2 = new Person("Alice", 25)

println person1  // Output: Person(Alice, 25)
println person1 == person2  // Output: true

এখানে, @Canonical মেটা-প্রোগ্রামিং ট্যাগ ক্লাসের জন্য toString(), equals(), এবং hashCode() মেথড তৈরি করেছে।

1.4 Compile-Time Mixin

Groovy তে Compile-Time Mixin ব্যবহার করে আপনি ক্লাসে নতুন বৈশিষ্ট্য বা আচরণ যোগ করতে পারেন। এটি সাধারণত কোডের আগে কার্যকর হয়।

class Person {
    String name
    int age
}

@Mixin(Person)
class SpecialPerson {
    String nickname
}

def person = new SpecialPerson(name: "John", age: 30, nickname: "Johnny")
println person.nickname  // Output: Johnny

এখানে, @Mixin কম্পাইল-টাইমে SpecialPerson ক্লাসে Person ক্লাসের বৈশিষ্ট্য যোগ করেছে।


2. Runtime Meta-Programming

Runtime Meta-Programming হল এমন একটি প্রক্রিয়া যেখানে কোডের গঠন বা আচরণ রানটাইমে পরিবর্তিত হয়। Groovy তে আপনি MetaClass, ExpandoMetaClass এবং Method Missing এর মতো বিভিন্ন মেকানিজম ব্যবহার করে রানটাইম মেটা-প্রোগ্রামিং করতে পারেন। রানটাইম মেটা-প্রোগ্রামিং এর মাধ্যমে, আপনি অবজেক্টের মেথড, প্রপার্টি বা আচরণ পরিবর্তন করতে পারেন, এমনকি এটি তৈরি হওয়ার পরেও।

2.1 MetaClass এবং ExpandoMetaClass

Groovy তে MetaClass ব্যবহার করে আপনি একটি ক্লাসের মেথড বা প্রপার্টি রানটাইমে পরিবর্তন করতে পারেন। Groovy এর ExpandoMetaClass এর মাধ্যমে, আপনি ডাইনামিকভাবে মেথড যোগ করতে পারেন।

2.2 MetaClass উদাহরণ
class Person {
    String name
    int age
}

def person = new Person(name: "Alice", age: 25)
println person.name  // Output: Alice

// Modify the name property using MetaClass
person.metaClass.getName = { -> "Modified: ${delegate.name}" }
println person.name  // Output: Modified: Alice

এখানে, metaClass ব্যবহার করে Person ক্লাসের name প্রপার্টি রানটাইমে পরিবর্তন করা হয়েছে।

2.3 ExpandoMetaClass উদাহরণ
class Person {
    String name
    int age
}

def person = new Person(name: "Bob", age: 28)

// Dynamically add a new method at runtime
person.metaClass.sayHello = { -> println "Hello, I am ${delegate.name}!" }
person.sayHello()  // Output: Hello, I am Bob!

এখানে, ExpandoMetaClass ব্যবহার করে sayHello মেথড রানটাইমে Person ক্লাসে যোগ করা হয়েছে।

2.4 Method Missing

Groovy তে Method Missing একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একটি মেথডের জন্য ডাইনামিকভাবে কোড লিখতে সক্ষম করে, যখন সেই মেথড কোনও ক্লাসে ডিফাইন করা না থাকে।

class DynamicPerson {
    def methodMissing(String name, args) {
        println "Method $name is called with arguments $args"
    }
}

def person = new DynamicPerson()
person.someMethod("Hello", "World")  // Output: Method someMethod is called with arguments [Hello, World]

এখানে, methodMissing ব্যবহার করা হয়েছে ডাইনামিকভাবে মেথড কল হ্যান্ডল করার জন্য, যেখানে someMethod ডিফাইন করা হয়নি।


3. Compile-Time vs Runtime Meta-Programming

বৈশিষ্ট্যCompile-Time Meta-ProgrammingRuntime Meta-Programming
কাজের সময়কম্পাইলেশনের সময়রানটাইমে
কোড পরিবর্তনকোডের গঠন কম্পাইলেশনের সময় পরিবর্তন হয়কোডের আচরণ রানটাইমে পরিবর্তিত হয়
বৈশিষ্ট্য/অভ্যাসAST Transformations, Compile-Time MixinMetaClass, ExpandoMetaClass, Method Missing
উদাহরণ@TupleConstructor, @Canonical, @ImmutablemetaClass, ExpandoMetaClass, methodMissing
প্রয়োগক্লাসের কোড পরিবর্তন করাঅবজেক্টের আচরণ বা ফাংশনালিটি রানটাইমে পরিবর্তন করা

সারসংক্ষেপ

Groovy তে Meta-Programming একটি শক্তিশালী ফিচার যা কোডের গঠন এবং আচরণকে পরিবর্তন করতে সহায়তা করে। Compile-Time Meta-Programming কোডের গঠন কম্পাইলেশনের সময় পরিবর্তন করে (যেমন AST Transformations), এবং Runtime Meta-Programming কোডের আচরণ রানটাইমে পরিবর্তিত হয় (যেমন metaClass, ExpandoMetaClass, এবং methodMissing)। Groovy তে মেটা-প্রোগ্রামিংয়ের মাধ্যমে আপনি কোডের কার্যকারিতা পরিবর্তন, নতুন মেথড বা প্রপার্টি ডাইনামিকভাবে যোগ করতে পারেন, যা উন্নত ও নমনীয় প্রোগ্রামিংয়ের জন্য উপকারী।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion